| import qualified Maybe import qualified Prelude
|
| genericIndex :: Integral a => [b] -> a -> b
genericIndex | (x : vw) yy | = | genericIndex5 (x : vw) yy |
genericIndex | (vx : xs) n | = | genericIndex3 (vx : xs) n |
genericIndex | vy vz | = | genericIndex0 vy vz |
|
|
genericIndex0 | vy vz | = | error [] |
|
|
genericIndex1 | vx xs n True | = | error [] |
genericIndex1 | vx xs n False | = | genericIndex0 (vx : xs) n |
|
|
genericIndex2 | vx xs n True | = | genericIndex xs (n - 1) |
genericIndex2 | vx xs n False | = | genericIndex1 vx xs n otherwise |
|
|
genericIndex3 | (vx : xs) n | = | genericIndex2 vx xs n (n > 0) |
genericIndex3 | yv yw | = | genericIndex0 yv yw |
|
|
genericIndex4 | True (x : vw) yy | = | x |
genericIndex4 | yz zu zv | = | genericIndex3 zu zv |
|
|
genericIndex5 | (x : vw) yy | = | genericIndex4 (yy == 0) (x : vw) yy |
genericIndex5 | zw zx | = | genericIndex3 zw zx |
|
| import qualified Maybe import qualified Prelude
|
| genericIndex :: Integral b => [a] -> b -> a
genericIndex | (x : vw) yy | = | genericIndex5 (x : vw) yy |
genericIndex | (vx : xs) n | = | genericIndex3 (vx : xs) n |
genericIndex | vy vz | = | genericIndex0 vy vz |
|
|
genericIndex0 | vy vz | = | error [] |
|
|
genericIndex1 | vx xs n True | = | error [] |
genericIndex1 | vx xs n False | = | genericIndex0 (vx : xs) n |
|
|
genericIndex2 | vx xs n True | = | genericIndex xs (n - fromInt (Pos (Succ Zero))) |
genericIndex2 | vx xs n False | = | genericIndex1 vx xs n otherwise |
|
|
genericIndex3 | (vx : xs) n | = | genericIndex2 vx xs n (n > fromInt (Pos Zero)) |
genericIndex3 | yv yw | = | genericIndex0 yv yw |
|
|
genericIndex4 | True (x : vw) yy | = | x |
genericIndex4 | yz zu zv | = | genericIndex3 zu zv |
|
|
genericIndex5 | (x : vw) yy | = | genericIndex4 (yy == fromInt (Pos Zero)) (x : vw) yy |
genericIndex5 | zw zx | = | genericIndex3 zw zx |
|